Extensible device driver

ABSTRACT

A device driver module for supporting the use of an external device by a computing device which executes an operating system, the device driver module including an initialization portion which is called by the operating system, whereupon the initialization portion detects the presence of a driver plug-in module, obtains information from the detected driver plug-in module, and passes the information from the detected driver plug-in module to the operating system, and also including an operation portion which accesses and executes a functional portion of the detected plug-in module, receives from the operating system an event notification corresponding to the external device and, in the case that the detected driver plug-in module accepts the event notification, passes the event notification to the detected driver plug-in module.

BACKGROUND OF THE INVENTION

[0001] 1. Field of the Invention

[0002] The invention concerns a device driver which provides for dynamicextensible functionality without the need for recompilation of thedevice driver. For example, the present invention can be implemented ina printer driver which interfaces to an operating system, whereby theprinter driver detects a driver plug-in module, provides informationcorresponding to the detected driver plug-in module to the operatingsystem, and then dynamically accesses the functionality of the detecteddriver plug-in module.

[0003] 2. Description of the Related Art

[0004] Typically, a device driver, such as a printer driver, isinstalled on a workstation or computer in order to support access to anduse of the corresponding device, such as a printer. Device drivers aregenerally developed and provided by the manufacturer of thecorresponding device, and are installed when the corresponding device isphysically installed in a computing environment, or before a user beginsto use an already-installed device.

[0005] A device driver in a windowing operating system is typicallycomprised of multiple files known as dynamic link library (.dll) files,each of which implements a major functional component of the devicedriver. For example, a printer driver may be comprised of a userinterface .dll file for displaying user interface property sheets, agraphics rendering .dll file for handling the necessary rendering ofimage data, and other .dll files representing other functionalcomponents of the printer driver. In such an example, the user interface.dll file contains compiled code to implement the user interfacefunctionality for the printer driver by utilizing and accessingoperating system interface calls. In this manner, the user interface.dll file provides necessary information and parameters to the operatingsystem so that desired user interface property sheets for the printerdriver can be displayed on a user's display.

[0006] In addition, the user interface .dll file has the necessaryfunctional code to dynamically provide background support for thedisplayed user interface. For instance, the user interface may includebuttons and dialog features for selecting black-and-white printing orcolor printing, whereupon, when the user selects black-and-whiteprinting, the functional code of the user interface .dll fileacknowledges the user's selection on the displayed user interfaceproperty sheet and sets an internal flag to pass to the graphicsrendering .dll file to implement the user's selection.

[0007] As mentioned above, a .dll file of a device driver implements agiven functionality of the device driver, such as a user interface .dllfile and a graphics rendering .dll file for a printer driver. Each .dllfile may itself contain calls to other .dll files. For example, a userinterface .dll file may provide a user interface comprised of severaltabbed property sheets for the user to choose from depending on the typeof device functionality that the user wishes to access and/or modify. Insuch a case, the user interface .dll file may contain fixed calls toother predetermined .dll files representing each of the tabbed propertysheets of the user interface.

[0008] Device drivers as described above are typically compiled by thedeveloper of the device driver after which they are statically fixedwith respect to the functional capabilities of the device driver. Forexample, the user interface .dll file is compiled before distributionand subsequent installation on a user's computer, whereupon the userinterface property sheets which are displayed and supported by the userinterface .dll file will always be the same.

[0009] Even in the example discussed above in which the user interface.dll file contains fixed calls to other predetermined .dll files, theidentity of each of the other predetermined .dll files is always fixedupon compilation of the user interface .dll file.

[0010] Accordingly, the functionality of a device driver which isinstalled on a user's computer is statically fixed and cannot be readilymodified to add additional functionality that may be desired by theuser, or by a network administrator in a networked computingenvironment. For example, a network administrator may wish to have auser's printer driver support network-wide printing applications, suchas secure printing and job accounting. The printer driver as describedabove cannot readily be modified by the administrator to add suchfunctionality. Instead, the developer of the printer driver would haveto modify the user interface .dll file, as well as other .dll files, toadd such functionality, and then recompile and test the .dll files. Themodified .dll files of the printer driver would then have to beinstalled on the user's computer. It can be appreciated that thismodification process is cumbersome and inefficient for users, networkadministrators and device driver developers, every time the addition ofnew functionality into a device driver is desired.

SUMMARY OF THE INVENTION

[0011] The present invention addresses the foregoing problems byproviding a printer driver which interfaces to an operating system,whereby the printer driver detects one or more driver plug-in modules,provides information corresponding to each detected driver plug-inmodule to the operating system, and then dynamically accesses thefunctionality of each detected driver plug-in module. In this manner,the functionality of the device driver is dynamically extended based onthe number and type of driver plug-in modules detected by the devicedriver, without having to redesign, recompile and retest the devicedriver.

[0012] Accordingly, one aspect of the invention concerns a device drivermodule for supporting the use of an external device by a computingdevice which executes an operating system, the device driver moduleincluding an initialization portion which is called by the operatingsystem, whereupon the initialization portion detects the presence of adriver plug-in module, obtains information from the detected driverplug-in module, and passes the information from the detected driverplug-in module to the operating system, and also including an operationportion which accesses and executes a functional portion of the detectedplug-in module, receives from the operating system an event notificationcorresponding to the external device and, in the case that the detecteddriver plug-in module accepts the event notification, passes the eventnotification to the detected driver plug-in module.

[0013] Preferably, the driver plug-in module is detected by searching asystem registry of the operating system for an entry corresponding tothe driver plug-in module. Also, the information is obtained from thedriver plug-in module by utilizing an information function call which isaccessed by a pointer that is exported from the driver plug-in module.Also, the device driver module is preferably a user interface module andthe information obtained from the driver plug-in module preferablyincludes attributes of dialog property sheets for display, and a pointerto executable code in the driver plug-in module for implementing aspecific function, such as print job accounting or another function. Theinformation obtained from the driver plug-in module is also preferablystored in a local data structure by the user interface module. Lastly,the information obtained from the driver plug-in module preferablyincludes an event-request indicator for use in determining which typesof event notifications are to be passed to the driver plug-in module.

[0014] By virtue of the foregoing, the functionality of a device drivercan be dynamically extended based on the number and type of driverplug-in modules detected in the computing device by the device driver,such that the functionality of each detected driver plug-in module isaccessed and utilized by the device driver without having to redesign,recompile and retest the device driver.

[0015] According to anther aspect, the invention concerns a userinterface module of a printer driver for supporting the use of a printerby a computing device which executes an operating system. The userinterface module includes an initialization portion which is called bythe operating system, whereupon the initialization portion detects adriver plug-in identifier in a system registry of the operating system,accesses and loads into a memory a driver plug-in module correspondingto the driver plug-in identifier, obtains a pointer from the driverplug-in module to an information function call within the driver plug-inmodule, executes the information function call to receive informationfrom the driver plug-in module, stores the received information in alocal data structure, and passes a portion of the received informationto the operating system by using an operating system function call. Theuser interface module further includes an operation portion thataccesses and executes a functional portion of the driver plug-in moduleby using a functional pointer provided in the received information, thatreceives from the operating system event notifications corresponding toa print job being performed by the printer and that, in the case that anevent-request indicator provided in the received information indicatesthat the driver plug-in module accepts the event notification, passesthe event notification to the driver plug-in module.

[0016] Preferably, the information obtained from the driver plug-inmodule includes attributes of dialog property sheets for display, and apointer to executable code in the driver plug-in module for implementinga specific function, such as print job accounting or another function.Also, the event-request indicator preferably defines which types ofevent notifications are to be passed to the driver plug-in module.

[0017] By virtue of the foregoing, the functionality of a device drivercan be dynamically extended based on the number and type of driverplug-in modules detected in the computing device by the device driver,such that the functionality of each detected driver plug-in module isaccessed and utilized by the device driver without having to redesign,recompile and retest the device driver.

[0018] In another aspect of the invention, a driver plug-in module isprovided for use by a device driver module of a device driver, thedevice driver for supporting the use of an external device by acomputing device executing an operating system. The driver plug-inmodule includes a functional portion having executable code thatsupports a functional application, and a resource portion which includesresource information corresponding to the functionality supported bydriver plug-in module, and an information pointer to an informationfunction call. The information pointer is accessed by the device drivermodule to initiate the information function call which returns to thedevice driver module a resource pointer corresponding to the resourceinformation of the resource portion, and a functional pointercorresponding to the executable code of the functional portion.

[0019] Preferably, the resource information is accessed by utilizing theresource pointer and includes a number of dialog property sheetssupported by the driver plug-in module, a type of each dialog propertysheet supported by the driver plug-in module, and attributes of eachdialog property sheet supported by the driver plug-in module. Inaddition, the resource portion preferably includes an event pointer toan event handler, and the event pointer is passed to the device drivermodule via the information function call, whereby the event pointer isused by the device driver module to initiate the event handler to passthe event notification received by the device driver module from theoperating system to the driver plug-in module. The device driver moduleand the driver plug-in module are each preferably comprised of a dynamiclink library file.

[0020] By virtue of the foregoing, the functionality of a device drivercan be dynamically extended based on the number and type of driverplug-in modules registered for detection in the computing device by thedevice driver, such that the functionality of each detected driverplug-in module is accessed and utilized by the device driver withouthaving to redesign, recompile and retest the device driver.

[0021] In a further embodiment, the invention is directed to a methodfor registering a driver plug-in module for use by a device drivermodule of a device driver which supports the use of an external deviceby a computing device. The method includes identifying at least oneavailable driver plug-in module located on an external source, selectingat least one of the available driver plug-in modules for installation onthe computing device, and installing each selected driver plug-in moduleon the computing device by storing each selected driver plug-in modulein a memory on the computing device, and entering an identifiercorresponding to each selected driver plug-in module into a systemregistry of an operating system which is executing on the computingdevice.

[0022] Preferably, the method is performed by an installation scriptobtained from either an installation program provided by the developerof the device driver, or from another source such as the web or aCD-ROM. Also, the identifier corresponding to each selected driverplug-in module is preferably entered into a system registry locationwhich corresponds to the name of the external device.

[0023] By virtue of the foregoing, driver plug-in modules can be readilyaccessed and registered, either at the time of printer installation, orat a later time. Accordingly, the functionality of a device driver canbe dynamically extended based on the number and type of driver plug-inmodules registered for detection in the computing device by the devicedriver, such that the functionality of each detected driver plug-inmodule is accessed and utilized by the device driver without having toredesign, recompile and retest the device driver.

[0024] In another embodiment of the invention, a method is presented forperforming a print job on a printer, the print job being sent to theprinter by a computing device. The method includes receiving, by anoperating system executing in the computing device, a first user inputrequest to display a main printer dialog property sheet on a display ofthe computing device, initiating, by the operating system, execution ofa user interface module of a printer driver corresponding to theprinter, detecting, by the user interface module, an identifier in asystem registry corresponding to a driver plug-in module, obtaining, bythe user interface module, tabbed dialog property sheet information anda functional pointer from the driver plug-in module, and passing thetabbed dialog property sheet information and main dialog property sheetinformation from the user interface module to the operating system. Themethod further includes displaying, by the operating system, the mainprinter dialog property sheet on the display, the main dialog propertysheet including a tab to access a tabbed dialog property sheetcorresponding to the tabbed dialog property sheet information obtainedfrom the driver plug-in module, receiving, by the operating system, asecond user input request to display the tabbed dialog property sheet,and displaying, by the operating system, the tabbed dialog propertysheet in response to the second user input request. In addition, themethod includes receiving, by the operating system, a third user inputrequest to use a function supported by the tabbed dialog property sheet,sending, by the operating system, the third user input request to theuser interface module, initiating, upon utilization of the functionalpointer by the user interface module, execution of executable code inthe driver plug-in module which implements the function corresponding tothe third user input request, receiving, by the operating system, aprint request to initiate printing of image data by the printer, andrendering, by the printer driver upon receiving the print request fromthe operating system, the image data into a print job and sending theprint job to the printer which executes the print job. Finally, themethod includes sending print event notifications related to the printjob from the user interface module to the driver plug-in module, theprint event notifications being utilized by the executable code in thedriver plug-in module.

[0025] Preferably, the tabbed dialog information is obtained from thedriver plug-in module by utilizing an information function call which isaccessed by a pointer that is exported from the driver plug-in module.Also, the tabbed dialog information preferably includes attributes ofdialog property sheets for display, and a pointer to executable code inthe driver plug-in module for implementing a specific function, such asprint job accounting or another function. The information obtained fromthe driver plug-in module is also preferably stored in a local datastructure by the user interface module. Lastly, the information obtainedfrom the driver plug-in module preferably includes an event-requestindicator for use in determining which types of event notifications areto be sent to the driver plug-in module.

[0026] By virtue of the foregoing, the functionality of a device drivercan be dynamically extended based on the number and type of driverplug-in modules detected in the computing device by the device driver,such that the functionality of each detected driver plug-in module isaccessed and utilized by the device driver without having to redesign,recompile and retest the device driver.

[0027] This brief summary has been provided so that the nature of theinvention may be understood quickly. A more complete understanding ofthe invention can be obtained by reference to the following detaileddescription of the preferred embodiment thereof in connection with theattached drawings.

BRIEF DESCRIPTION OF THE DRAWINGS

[0028]FIG. 1 is a representative view of a computing environment inwhich the present invention may be implemented according to oneembodiment of the invention.

[0029]FIG. 2 is a detailed block diagram showing the internalarchitecture of the computer shown in FIG. 1.

[0030]FIG. 3 is a block diagram for explaining the components of a userinterface module of a printer driver according to one embodiment of thepresent invention.

[0031]FIG. 4 is a block diagram for explaining the components of aplug-in module according to one embodiment of the present invention.

[0032]FIG. 5 is a block diagram for explaining the components of a localdata structure according to one embodiment of the present invention.

[0033]FIG. 6 is a flowchart for explaining the use of a plug-in moduleby a printer driver according to one embodiment of the presentinvention.

[0034]FIG. 7 is a block diagram for explaining a main dialog propertysheet of a printer driver user interface according to one embodiment ofthe present invention.

[0035]FIG. 8 is a block diagram for explaining a main dialog propertysheet of a printer driver user interface which incorporates tabbeddialog property sheets from plug-in modules according to one embodimentof the present invention.

[0036]FIG. 9 is a flowchart for explaining the registration of a plug-inmodule according to one embodiment of the present invention.

[0037]FIG. 10 is a flowchart for explaining the interaction between aplug-in module, a printer driver and an operating system according toone embodiment of the present invention.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0038] The present invention is directed to an extensible device driverfor use in a computing device to support the use of an external device,such as a printer. In particular, the device driver of the presentinvention is able to detect and incorporate plug-in modules existing onthe computing device in order to extend the functional capabilities ofthe computing device. As an example, the invention is discussed belowaccording to one embodiment in which the device driver is a printerdriver for supporting the use of a printer. It should be appreciatedthat the present invention can be implemented for other device driverswhich support other devices, such as digital copiers, scanners, cameras,and the like.

[0039]FIG. 1 provides a system view of a computing environment in whichthe present invention may be implemented. As shown in FIG. 1, thecomputing environment comprises computer 10, printer 20, server 30, andconnection 1. Connection 1 can be a simple local connection betweencomputer 10 and printer 20, such as a serial, USB, FireWire, or othersuch connection. In the alternative, connection 1 may be a network, suchas an Ethernet network medium consisting of a bus-type physicalarchitecture. It should be appreciated that connection 1 may be also becomprised of another type of network, including the internet.

[0040] Desktop computer 10 is preferably a typical personal computer orworkstation having a windowing operating system environment such asMicrosoft Windows 2000, Microsoft Windows ME or Microsoft Windows XP. Asis typical with PC-type computers, desktop computer 10 preferably hasdisplay 11, keyboard 15, mouse 14, host processor 12, fixed disk 13,CD-ROM drive 16, and a floppy drive and/or other type of storage medium(not shown). The contents of fixed disk 13 of computer 10 according tothe present invention are explained in more detail below with respect toFIG. 2.

[0041] Printers 20 and 25 are also connected to computer 10 byconnection 1 and are preferably laser or ink-jet printers which arecapable of printing images on recording medium based on received printdata. For example, computer 10 renders a printjob by executing a printerdriver according to the present invention, as discussed in more detailbelow. Printer 20 receives the rendered print job from computer 10,and/or from other sources, via connection 1, and then executes the printjob. Preferably, printer 20 is in two-way communication with computer 10via connection 1, so that the status of a print job can be reported backto computer 10 during execution of the print job by printer 20. Printer25 operates in a manner similar to printer 20 as described above. Itshould be appreciated that the present invention can be implement inother types of computing devices and is not limited to implementation incomputer 10 as shown in FIG. 1. In addition, the present invention canbe utilized for supporting types of devices other than printers, such asscanners, copiers, digital cameras, etc.

[0042] In addition, connection 1 is preferably a network connection,such as an Ethernet network medium consisting of a bus-type physicalarchitecture. Server 30 is also connected to connection 1. Server 30preferably comprises a PC-compatible computer having a windowingoperating system environment such as Microsoft Windows 2000, MicrosoftWindows ME or Microsoft Windows XP. Server 30 has a fixed disk 31 whichis preferably a large fixed disk for storing numerous files,applications, data, web pages, and plug-in modules, which are discussedbelow. Server 30 can therefore be utilized by other devices onconnection 1, such as computer 10, as a file server, web page server,applications server, or other type of server. Server 30 may also act asa gateway for other devices on connection 1 to access another networksuch as the Internet. Finally, server 30 may act as a web server tosupport web pages for access by computer 10 to obtain and install deviceplug-in modules, as explained in more detail below.

[0043]FIG. 2 is a block diagram for explaining the internal architectureof computer 10, including the contents of fixed disk 13, forimplementing the present invention. As seen in FIG. 2, the internalarchitecture of computer 10 includes fixed disk 13, random access memory(RAM) 17 and processor (CPU) 19. As with typical computers, operatingsystem 40 loads executable code for a desired program into RAM 17 foraccess and execution by CPU 19. Fixed disk 13 of computer 10 includesoperating system 40, printer driver 50, and storage area 60. Asdiscussed above, operating system 40 is preferably a windowing operatingsystem, and in particular is preferably a Microsoft Windows operatingsystem which supports function calls to provide an application programinterface for applications which are executing on operating system 40.In particular, the function calls preferably include calls for operatingsystem 40 to obtain attributes and information corresponding to propertysheets for rendering of such property sheets on display 11 of computer10. In addition, operating system 40 also includes function calls tosupport providing status information of external devices to applicationswhich are executing on computer 10.

[0044] Registry 41 is an information storage location on fixed disk 13which can reside in either a file folder or a database of fixed disk 13.Registry 41 is maintained and utilized by operating system 40 andincludes information necessary for operating system 40 to supportdevices, such as printers, scanners, copiers, etc. In this case, for thesake of brevity, registry 41 is shown to only include data correspondingto printers 20 and 25 which are supported by operating system 40 ofcomputer 10. In particular, registry 41 contains plug-in identifiers toimplement the present invention and shows two columns corresponding toprinters 20 and 25, respectively, that operating system 40 supports.Printer1_id 42 and printer2_id 47 are the device identifiers for each ofprinters 20 and 25, and are generally comprised of a name or a code forthe corresponding printer. For example, printer1_id 42 may be “LASER1”for printer 20, and printer2_id 47 may be “INKJET1” for printer 25,thereby identifying the two printers which can be utilized by a user ofcomputer 10 through operating system 40.

[0045] In the respective columns under printer1_id 42 and printer2_id 47are provided a list of plug-in identifiers which identify each plug-inmodule that is available in storage area 60 for use by printer driver 50in order to implement the present invention by adding functionality to apre-existing device driver, such as printer driver 50, without the needto modify, recompile and test the device driver. Each plug-in identifieris preferably an address of the location in storage area 60 for acorresponding plug-in module. In the alternative, each plug-inidentifier can be comprised of a name or a code for the correspondingplug-in module.

[0046] Returning to registry 41, the column under printer1_id 42, whichcorresponds to printer 20, includes the plug-in identifiers forsec_plugin_id 42, rdr_plugin_id 44, inst_plugin_id 45, and act_plug_id46, which correspond to secure print plug-in module 63, job redirectplug-in module 62, installation plug-in module 61, and job acct plug-inmodule 65 located in storage area 60.

[0047] In this manner, registry 41 maintains the plug-in identifiers foreach printer in order to assist printer driver 50 in detecting whichplug-in modules are to be made available for use by printer driver 50 toextend the functionality of printer driver 50. In this regard, eachplug-in identifier of registry 41 is entered into registry 41 under aparticular device identifier when that device is installed, or at alater time by a user or system administrator of computer 10, asdescribed in more detail below.

[0048] Printer driver 50 in FIG. 2 is a driver module for execution byoperating system 40 to allow computer 10 to communicate with and utilizeprinter 20. A similar printer driver (not shown) can be used tocommunicate with and utilize printer 25, and is not described herein forthe sake of brevity.

[0049] As seen in FIG. 2, printer driver 50 is comprised of threemodules which include user_interface_mod 51, graphics_render_mod 52, andother mod 53. User_interface_mod 51 is utilized to provide a userinterface for user access and control of printer driver 50. For example,in this embodiment of the invention, the device driver is printer driver50 for driving printer 20 by computer 10, and thereforeuser_interface_mod 51 is executed when the user indicates a desire toview a user interface on display 11 for accessing and controlling thefeatures of printer driver 50. In a windowing operating system such asoperating system 40, it is common for a user to hit a buttoncorresponding to a “printer properties” in order to display a dialogproperty sheet to display a printer driver user interface which isgenerally comprised of a main dialog property sheet, with tabs foraccessing other tabbed dialog property sheets, wherein each dialogproperty sheet presents buttons, information and dialog regardingcertain features of the printer driver.

[0050] As discussed above, the present invention provides plug-inmodules for access and incorporation by a device driver to extend thefunctionality of the device driver. In the embodiment described above,the plug-in modules are utilized to add new functions to the printerdriver 50, such as job accounting, secure printing and the like. Inaddition, the plug-in modules also provide tabbed dialog propertysheets, corresponding to the new functions, for access byuser_interface_mod 51 to incorporate into the printer driver userinterface displayed on display 11. The composition and operation ofuser_interface_mod 51 is discussed in more detail below.

[0051] Graphics_render_mod 52 is another component of printer driver 50and is used to render given image data into a print job according to thedesired settings of a user of computer 10. Other_mod 53 represents othermodules that are used to implement printer driver 50. In this regard,Graphics_render_mod 52 and other_mod 53 can also extend theirfunctionality by accessing and incorporating plug-in modules, however,for the sake of brevity, the use of plug-in modules is described indetail below with respect to user_interface_mod 51. Preferably, theaforementioned modules of printer driver 50 are dynamic link libraryfiles.

[0052] Storage area 60 is an area of fixed disk 13 which is used by bothoperating system 40 and printer driver 50 to operate the computer and toutilize printer driver 50 according to the present invention. As seen inFIG. 2, storage area 60 includes installation plug-in module 61, jobredirect plug-in module 62, secure print plug-in module 63, policy mgmtplug-in module 64, job acct plug-in module 65, and feature mod plug-inmodule 66. As described above with respect to registry 41, these plug-inmodules are used for access to extend the functionality of a devicedriver, such as printer driver 50. For example, installation plug-inmodule 61 provides functionality for installation of new printers foruse by computer 10, job redirect plug-in module 62 providesfunctionality for redirecting print jobs from one printer to anotherprinter, secure print plug-in module 63 provides functionality forensuring that print jobs are sent to a printer and printed in a securefashion, policy mgmt plug-in module 64 provides functionality formanaging access to printers and printer functionality, job acct plug-inmodule 65 provides functionality for tracking and reporting print jobssent to a printer, and feature mod plug-in module 66 providesfunctionality for supporting new hardware added to a printer, such as apaper tray or a finishing device such as a stapler. Of course, it shouldbe appreciated that the types of plug-in modules shown in storage area60 of FIG. 2 are examples of functions for use by a printer driver tosupport a printer, and are not an exhaustive list of the types offunctions that can be implemented by plug-in modules for a printerdriver, much less for other devices such as scanners, copiers, digitalcameras, etc. Preferably, the plug-in modules are dynamic link libraryfiles.

[0053] Returning to FIG. 2, it can be seen that storage area 60 alsoincludes other modules 67, other files 69, web browser 70, systemfolders 71, database 72, local data structures 73 and registrationapplication 74. Other modules 67 and other files 69 are utilized foroperation of computer 10 by operating system 40 and by otherapplications executed by CPU 19 of computer 10. Web browser 70 isexecuted by CPU 19 in order to allow a user of computer 10 to access webpages of web servers, such as server 30, via connection 1. Systemfolders are managed locations which store files and applications for useby operating system 40 and by other applications executed by CPU 19.Similarly, database 72 is used to store information that may be accessedand used by operating system 40 and by other applications executed byCPU 19. Local data structures 73 is a set of data structures for use byuser_interface_mod 51, as described in more detail below. Lastly,registration application is an application, preferably comprised of aninstruction script, which is used to identify and install plug-inmodules into registry 41, as described in more detail below.

[0054]FIG. 3 is a block diagram for describing the composition ofuser_interface_mod 51 of printer driver 50 shown in FIG. 2. A seen inFIG. 3, user_interface_mod 51 is comprised of initialization portion 80and operation portion 90. Initialization portion 80 is used toinitialize user_interface_mod 51 in response to a user request to viewthe user interface for printer driver 50. For example, when a userselects “printer properties” button on display 11 which corresponds toprinter 20, operating system 40 initiates execution of initializationportion 80 of user_interface_mod 51 in order to initialize the printerdriver user interface and to pass necessary dialog property sheetinformation to operating system 40 for display. Initialization portion80 includes plug-in search function 81, plug-in information function 82,dialog structures function 83 and static dialog property sheetsattributes 84.

[0055] Plug-in search function 81 searches a predetermined location,such as registry 41, for registered plug-in modules corresponding toprinter 20. Of course, another location such as a system directoryfolder, or a database, can be used as a predetermined location to storeplug-in modules for access by plug-in search function 81. Plug-ininformation function 82 obtains information corresponding to any plug-inmodules detected by plug-in search function 81, and selects thosedetected plug-in modules that can be utilized by user_interface_mod 51.Plug-in information function 82 stores the obtained information for eachselected plug-in module into a local data structure.

[0056] Dialog structures function 83 is used to pass to operating system40 information and attributes of each static dialog property sheetsupported by user_interface_mod 51, as well as the obtained informationand attributes of each tabbed dialog property sheet supported by theselected plug-in modules. Once operating system 40 receives theinformation and attributes for each dialog property sheet, operatingsystem 40 displays the rendered dialog property sheets on display 11 ofcomputer 10. In this regard, static dialog property sheets attributes 84contains the information and attributes of each static dialog propertysheet supported by user_interface_mod 51.

[0057] Operation portion 90 of user_interface_mod 51 is comprised ofstatic dialog property sheet support code 91, static function code 92,plug-in functional access code 93, and plug-in event code 94. Operationportion 90 is executed after initialization portion 80 has completed,and operation portion 90 is used to support the static dialog propertysheets, to access the corresponding plug-in module for support of eachtabbed dialog property sheet supported by the selected plug-in modules,and to pass event information to appropriate plug-in modules, ifrequired. Static dialog property sheet support code 91 provides a dialogprocess to support the static dialog property sheets by monitoring foruser modification of settings and buttons on each static dialog propertysheet, and then updating the static dialog property sheet in acorresponding manner, and passing the modified settings to staticfunction code 92 and possibly to other portions of printer driver 50,such as Graphics_render_mod 52, to implement the user's modification.For example, a user may utilize a button on one of the main dialogproperty sheets of a displayed printer driver user interface to selectblack-and-white printing instead of color printing. Static dialogproperty sheet support code 91 would pass this user selection toGraphics_render_mod 52 so that the image data is rendered inblack-and-white in a print job for printing by printer 20. Staticfunction code 92 is used to handle other static functions ofuser_interface_mod 51, such as monitoring status of communication withprinter 20 and monitoring status of a print job being performed byprinter 20.

[0058] Plug-in function access code 93 is used to access the functionalcode of each selected plug-in, for supporting the tabbed dialog propertysheets provided by the corresponding selected plug-in module, and forimplementing the function supported by each selected plug-in module,such as job accounting, policy management, and the like. Plug-in eventcode 94 receives an event notification from operating system 40corresponding to printer 20, determines whether the received eventnotification has been requested by any of the selected plug-in modules,and then passes the event notification to the appropriate selectedplug-in modules for their use.

[0059]FIG. 4 is a block diagram for describing the composition of aplug-in module according to one embodiment of the present invention. Forpurposes of generally describing the composition of such plug-inmodules, job acct plug-in module 65 is illustrated in FIG. 4. As seen inFIG. 4, job acct plug-in module 65 includes resources portion 100 andfunctional portion 130. In general, resources portion 100 provides theinformation and functions to allow user_interface_mod 51 to access andimplement the tabbed dialog property sheets and functionality supportedby job acct plug-in module 65.

[0060] Functional portion 130 generally provides the functional code tosupport the tabbed dialog property sheets described in resources portion100 and to provide the functionality of job acct plug-in module 65 whichtracks and reports the number and type of print jobs sent to a givenprinter.

[0061] As seen in FIG. 4, resources portion includes interface 101 andattributes 110. Interface 101 provides the information and functions forallowing user_interface_mod 51 to access and implement the tabbed dialogproperty sheet information and the functionality supported by job acctplug-in module 65. Interface 101 includes plug-in function type 102,information function pointer 103, event handler pointer 104, resourcespointer 105, functional pointer 106, get information function 107, andevent handler 108.

[0062] Plug-in function type 102 provides an indication, preferably intext or code, of the type of function supported by the plug-in module,which in this case is job accounting. Information function pointer 103is a pointer representing an address of get information function 107,whereby job acct plug-in module 65 provides user_interface_mod 51 withinformation function pointer 103, and then user_interface_mod 51 callsget information function 107 using information function pointer 103 toaccess information contained in job acct plug-in module 65.

[0063] Event handler pointer 104 is a pointer to an address of eventhandler 108, and is provided to user_interface_mod 51 by job acctplug-in module 65 so that user_interface_mod 51 can call event handler108 to provide an event notification regarding printer 20 to job acctplug-in module 65. In this regard, user_interface_mod 51 determines ifthe event notification should be sent to job acct plug-in module 65based on event handler 108 which is passed to user_interface_mod 51 viaget information function 107. In another embodiment, event handler 108can also provide a descriptor, in text or code, of the type of eventnotification that should be sent to job acct plug-in module 65. Forexample, the job accounting function of job acct plug-in module 65 needsthe number of successfully printed pages of a print job and the type ofthe print job to keep an accurate account of all print jobs sent toprinter 20. Resources pointer 105 is a pointer to an address ofattributes 110, and is provided to user_interface_mod 51 via getinformation function 107 thereby allowing user_interface_mod 51 toaccess the type and the attributes of each tabbed dialog property sheetsupported by job acct plug-in module 65.

[0064] Similarly, functional pointer 106 is a pointer to an address ofattributes 110, and is provided to user_interface_mod 51 via getinformation function 107 thereby allowing user_interface_mod 51 toaccess the type and the attributes of each tabbed dialog property sheetsupported by job acct plug-in module 65.

[0065] Attributes 110 is accessed by resources pointer 105 and containsnumber of dialog property sheets 111 and property sheet attributes 115.

[0066] Number of dialog property sheets 111 indicates the number ofdialog property sheets supported by job acct plug-in module 65. Propertysheet attributes 115 is a data structure containing columns for eachdialog property sheet supported by job acct plug-in module 65 whichrepresent property sheet number 116, type 117 and attributes 118. Inthis manner, once resources pointer 105 is obtained byuser_interface_mod 51, the type and the attributes of each dialogproperty sheet supported by job acct plug-in module 65 can be obtainedby user_interface_mod 51 and then passed to operating system 40 forrendering the tabbed property sheets on display 11. Type 117 ispreferably text or code representation of the type of dialog propertysheet, such as INFO for a static property sheet, and SELECT for adynamic property sheet which allows the user to modify parameters usingbuttons and the like. Attributes 118 contains descriptive data for thedialog property sheet layout, the buttons, and dialog on the dialogproperty sheet, and other aspects of the dialog property sheet that areneeded by operating system 40 to render the dialog property sheet ondisplay 11.

[0067] Functional portion 130 includes functional code 131 and eventstatus monitor code 132. Functional code 131 is executable code that iscalled by user_interface_mod 51 by using functional pointer 106, whichis obtained by user_interface_mod 51 via get information function 107.Functional code 131 implements the functionality of job acct plug-inmodule 65, which in this case is print job accounting. Event statusmonitor code 132 handles receipt of an event notification which ispassed to job acct plug-in module 65 from user_interface_mod 51 viaevent handler 108. Event status monitor code 132 passes the receivedevent notification to functional code 131 for use in implementation ofthe functionality supported by job acct plug-in module 65.

[0068]FIG. 5 is a block diagram for describing the composition of alocal data structures 73 of storage area 60 in FIG. 2. As discussedabove with respect to initialization portion 80 of user_interface_mod 51in FIG. 3, user_interface_mod 51 used the get information function 107to obtain information, pointers and attributes from job acct plug-inmodule 65. Once initialization portion 80 has received this informationfrom job acct plug-in module 65, it places the information in a separatedata structure corresponding to job acct plug-in module 65 so that iscan later be accessed quickly and efficiently without having to use getinformation function 107 again. In particular, plug-in informationfunction 83 and dialog structures function 84 of initialization portion80 of user_interface_mod 51 obtain the information from each selectedplug-in module and place it in a separate directory structure of localdata structures 73.

[0069] Returning to FIG. 5, local data structures 73 is seen to includestructures 140, 160, 180 and 200 corresponding to each of the fourplug-in modules registered for printer1_id 42 in registry 41, whichcorresponds to printer 20. For sake of brevity, only data structure 140will be discussed because it corresponds to information obtained byuser_interface_mod 51 from job acct plug-in module 65. As seen in datastructure 140, the information contained therein is a subset of theinformation contained in resources portions 100 of job acct plug-inmodule 65. In particular, the information includes plug-in function type142, resources pointer 143, functional pointer 144, event handlerpointer 145, and attributes 150. Attributes 150 contains number ofdialog property sheets 151, and property sheet number 152, type 153, andattributes 154 of each dialog property sheet supported by job acctplug-in module 65. Each of these data were described above with respectto job acct plug-in module 65 of FIG. 4, and will not be describedfurther herein.

[0070]FIG. 6 is a flowchart which describes the interaction betweenuser_interface_mod 51 and job acct plug-in module 65. In step S601,user_interface_mod 51 receives an initialization call from operatingsystem 40 and then triggers initialization portion 80. In step S602,plug-in search function 81 searches the registry for the presence ofplug-in modules corresponding to printer 20. In step S603, it isdetermined if a plug-in module has been detected. If not, flow proceedsto return in step S615. If a plug-in module has been detected, flowpasses to step S604 in which the detected plug-in module, such as jobacct plug-in module 65, is loaded into memory, such as RAM 17. Next, instep S605, plug-in information function 82 obtains information functionpointer 103 from job acct plug-in module 65. Plug-in informationfunction 82 then uses the information function pointer 103 in step S606to call get information function 107 in order to receive information anddialog property sheet attributes 110 from resources portion 100 of jobacct plug-in module 65.

[0071] It is determined in step S607 if the detected plug-in module, inthis case job acct plug-in module 65, is a type supported byuser_(—interface)_mod 51. If not, flow passes to step S602 to continuesearching for registered plug-in modules. If the plug-in module issupported, which in this case job accounting is supported, then flowpasses to step S608 in which the received information from job acctplug-in module 65 is stored in a separate local data structure 140 oflocal data structures 73. In step S609, dialog structures function 83passes attributes of all dialog property sheets, both static and fromplug-ins, to operating system 40 for rendering by operating system 40 asa printer driver user interface on display 11. In step S610, operationalportion 90 of user_interface_mod 51 is executed and functional portion130 of job acct plug-in module 65 is called and executed by operationalportion 90 as needed to implement the function supported by job acctplug-in module 65.

[0072] Next, in step S611, it is determined if there are more plug-insto be incorporated by user_interface_mod 51, and if there are, flowpasses to step S602. If there are not more plug-ins, flow passes to stepS612 in which user_interface_mod 51 receives an event notificationregarding printer 20 from operating system 40. It is determined in stepS613 if the type of received event notification is requested by job acctplug-in module 65 using event handler 108. If so, then flow passes tostep S614 in which the event notification is passed fromuser_interface_mod 51 to job acct plug-in module 65 for use by theexecutable code in job acct plug-in module 65, and then flow passes toreturn in step S615. If not, flow passes directly to return in stepS615.

[0073]FIG. 7 is a graphic depiction of printer driver user interface 220in a case in which no plug-in modules have been detected andincorporated by user_interface_mod 51. As seen in FIG. 7, printer driveruser interface 220 is comprised of eight tabbed dialog property sheets,221 through 228, which represent static dialog property sheetsinherently supported by user_interface_mod 51. The eight tabbed dialogproperty sheets, 221 through 228, represent various aspects of printingin printer 20.

[0074]FIG. 8 is a graphic depiction of printer driver user interface 220in a case in which three plug-in modules have been detected andincorporated by user_interface_mod 51. As seen in FIG. 8, printer driveruser interface 220 includes the eight tabbed dialog property sheets, 221through 228, of FIG. 7, which represent static dialog property sheetsinherently supported by user_interface_mod 51. In addition, printerdriver user interface 220 includes three additional tabbed dialogproperty sheets for management 229, install printer 230 and redirect231, corresponding to policy mgmt plug-in module 64, installationplug-in module 61, and job redirect plug-in module 62. In this manner,the tabbed dialog property sheets for each of these three additionalfunctions are provided by their respective plug-ins viauser_interface_mod 51, without the need to modify, recompile and testuser_interface_mod 51.

[0075]FIG. 9 is a flowchart for explaining the identification andregistration of device plug-in modules according to the presentinvention. In step S901, plug-in module registration application 74 isaccessed by a user of computer 10. In this regard, the user may be asystem administrator responsible for the configuration and maintenanceof computer 10, or may simply be a user of computer 10. As discussedabove, the plug-in module registration application 74 may be accessedand loaded onto storage area 60 of fixed disk 13 at the time that thecorresponding device, such as printer 20, is installed, or at a latertime when it is desired to add new functionality to printer driver 50for printer 20. For example, plug-in module registration application 74may be accessed from an installation file which is provided with printer20 by the manufacturer, such as on a CD-ROM, or from a web page via theweb on connection 1, from fixed disk 13, or from another memory medium.In this case, plug-in module registration application 74 also preferablyinstalls the components of printer driver 50. Also, plug-in moduleregistration application 74 may be a separate application which is notassociated with initial installation of printer 20, and can be accessedand downloaded from the web, a CD-ROM, fixed disk 13 or other memorymedium.

[0076] Preferably, plug-in module registration application 74 iscomprised of an installation script, although programmed code can alsobe used. Returning to FIG. 9, the available plug-in modules provided byplug-in module registration application 74 are identified for display ondisplay 11 in step S902. The available plug-in modules can be located atthe same location that plug-in module registration application 74 wasaccessed from, or from another location such as from a web page on theweb, from a CD-ROM, from fixed disk 13, or from another memory medium.Preferably, the available plug-in modules are arranged and can be sortedbased on printer name, printer type or some other parameter. In stepS903, it is determined whether any available plug-in modules have beenidentified. If not, flow passes to return in step S911. If availableplug-in modules have been identified and displayed, then at least oneavailable plug-in module is selected for installation in step S904. Inthis regard, the selection of available plug-in modules may be a manualselection by a user of computer 10, or may be automatic based on adetected type of printer driver 50 in computer 10. The latter case mayespecially be useful when plug-in modules are installed at the timeprinter 20 is installed.

[0077] In step S905, the selected plug-in module is copied from itssource and stored in storage area 60 of fixed disk 13, and registry 41is accessed to prepare for registration of the selected plug-in module.In step S906, it is determined whether a pre-existing plug-in module hasalready been registered in registry 41 which is of the same type, orsame name, as the selected plug-in module. If so, flow passes to stepS907 in which the user of computer 10 is notified of the situation, andit is then determined in step S908 whether the user has instructed toproceed with installation of the selected plug-in module by replacing,or renaming, the pre-existing plug-in module. If the user opts forreplacement (or renaming), flow passes to step S909 in which thepre-existing plug-in module is deleted or renamed, as the case may be.Flow then passes to step S910. If, on the other hand, it is determinedin step S908 that the user has not instructed to proceed withinstallation of the selected plug-in module by replacing, or renaming,the pre-existing plug-in module, then flow passes to return in stepS911.

[0078] If it is determined in step S906 that a pre-existing plug-inmodule has not already been registered in registry 41 which is of thesame type, or same name, as the selected plug-in module, then flowpasses directly to step S910. An identifier is then entered intoregistry 41 for the selected plug-in module in correspondence with anentry for the device supported by the selected plug-in module, in thiscase printer 20 (step S910). The identifier may be entered under anentry based on a device identifier, such as in registry 41 depicted inFIG. 2, or may be entered under an entry based on device type, user nameor computer name, so long as user_interface_mod 51 searches forregistered plug-in modules based on these entry types. Flow passes toreturn in step S911. In this manner, plug-in modules can be readilyaccessed, installed and registered either at installation of thecorresponding device or at some time after its installation, therebyproviding new functionality for the device driver for the device withoutthe need to modify, recompile and test the device driver.

[0079]FIG. 10 is a flowchart for explaining the interaction of operatingsystem 40 with user_interface_mod 51 of printer driver 50 and withmultiple plug-in modules according to one embodiment of the presentinvention. In step S1001, operating system 40 receives a user requestfor display of the main dialog property sheet of the user interface forprinter driver 50. The operating system 40 sends an initialization callto user_interface_mod 51 in response to the user request for display ofthe main dialog property sheet in step S1002. User_interface_mod 51 thensearches registry 41 for detection of registered plug-in modulescorresponding to printer 20. In step S1004, it is determined if anyregistered plug-in modules were detected in step S1005. If none weredetected, flow passes to return in step S1019. If plug-in modules weredetected, flow passes to step S1005 in which user_interface_mod 51obtains information and attributes corresponding to tabbed dialogproperty sheets from each detected plug-in module by using informationpointers, as discussed above.

[0080] Next, in step S1006, user_interface_mod 51 then passes theobtained information and attributes to operating system 40, along withinformation and attributes for static tabbed dialog property sheetsinherently supported by user_interface_mod 51. In step S1007, operatingsystem 40 renders the main dialog property sheet of the printer driveruser interface on display 11 of computer 10, wherein the main dialogproperty sheet has tabs for accessing the other tabbed dialog propertysheets obtained from the detected plug-in modules. Operating system 40receives a request for display of one of the other tabbed dialogproperty sheets obtained from the detected plug-in modules in stepS1008. In step S1009, operating system 40 displays the requested tabbeddialog property sheet obtained from one of the detected plug-in modules.A request is received by operating system 40 in step S1010 to utilize afunction supported by the displayed tabbed dialog property sheet, andoperating system 40 sends the function request to user_interface_mod 51in step S1011.

[0081] In step S1012, user_(—interface)_mod 51 uses a functional pointerto access and execute the functional code in the plug-in modulecorresponding to the tabbed dialog property sheet which received thefunctional request. In this manner, the plug-in module implements afunction not inherently supported by user_interface_mod 51 of printerdriver 50. In step S1013, it is determined if there are more plug-inmodules to incorporate into user_interface_mod 51, and if so, flowpasses to step S1005 to obtain the information for the other plug-ins.If not, flow passes directly to step S1014 in which operating system 40receives a print request from the user to print image data by printer20. Operating system 40 sends the print request to printer driver 50 instep S1015, and the image data is rendered into a print job which issent to printer 20 for printing in step S1016. User_interface_mod 51receives an event notification from operating system 40 regarding thestatus of printer 20 in step S1017, and user_interface_mod 51 then sendsthe event notification to the appropriate plug-in modules in step S1018for their use.

[0082] Flow then passes to return in step S1019.

[0083] In this manner, the operating system, device driver, and driverplug-in modules function together in a coordinated fashion to provideadditional functionality to the device driver without the need tomodify, recompile and test the device driver.

[0084] It should be appreciated that the present invention can beimplemented for extending the functional capabilities of device driversother than printer drivers for supporting other types of devices. Inaddition, the present invention can be implemented in other types ofcomputing devices and computing environments, with other forms ofoperating systems, beyond those illustrated herein. In addition, thefunctional aspects of the software modules, functions, programs,applications, and other files, can be implemented in forms of softwareand instructions other than those illustrated herein.

[0085] The invention has been described with particular illustrativeembodiments. It is to be understood that the invention is not limited tothe above-described embodiments and that various changes andmodifications may be made by those of ordinary skill in the art withoutdeparting from the spirit and scope of the invention. In particular, andas stated above, the invention can be used to manage various types ofnetwork devices, not just network printers.

What is claimed is:
 1. A device driver module of a device driver forsupporting the use of an external device by a computing device whichexecutes an operating system, the device driver module comprising: aninitialization portion which is called by the operating system,whereupon the initialization portion detects the presence of a driverplug-in module, obtains information from the detected driver plug-inmodule, and passes the information from the detected driver plug-inmodule to the operating system; and an operation portion which accessesand executes a functional portion of the detected plug-in module,receives from the operating system an event notification correspondingto the external device and, in the case that the detected driver plug-inmodule accepts the event notification, passes the event notification tothe detected driver plug-in module.
 2. A device driver module accordingto claim 1, wherein the device driver module is one of multiple devicedriver modules comprising a device driver.
 3. A device driver moduleaccording to claim 1, wherein the device driver module is a userinterface module.
 4. A device driver module according to claim 3,wherein the driver plug-in module corresponds to a dialog property sheetfor display by the computing device.
 5. A device driver module accordingto claim 1, wherein the initialization portion detects the presence ofthe driver plug-in module by detecting an identifier for the driverplug-in module in a system registry of the operating system.
 6. A devicedriver module according to claim 1, wherein the initialization portiondetects the presence of the driver plug-in module by searching apredetermined location in a memory of the computing device.
 7. A devicedriver module according to claim 6, wherein the predetermined locationis a predetermined folder in a memory medium which is accessible to thecomputing device.
 8. A device driver module according to claim 1,wherein the initialization portion detects the presence of the driverplug-in module by detecting an identifier for the driver plug-in modulein a database file located in a memory medium which is accessible to thecomputing device.
 9. A device driver module according to claim 1,wherein the driver plug-in module is located in a memory of thecomputing device.
 10. A device driver module according to claim 1,wherein the initialization portion obtains the information from thedetected driver plug-in module by receiving a pointer to an informationfunction call within the driver plug-in module, and then by executingthe information function call which returns the information to theinitialization portion.
 11. A device driver module according to claim 1,wherein the information received by the initialization portion from thedetected driver plug-in module includes a re source pointer whichrepresents an address of a resource portion of the detected driverplug-in module and a functional pointer which represents an address ofthe functional portion of the detected driver plug-in module.
 12. Adevice driver module according to claim 11, wherein the resource portionof the detected driver plug-in module includes information correspondingto a number of dialog property sheets supported by the detected driverplug-in module, a type of each dialog property sheet supported by thedetected driver plug-in module, and attributes of each dialog propertysheet supported by the detected driver plug-in module.
 13. A devicedriver module according to claim 1, wherein the initialization portionpasses the information to the operating system by executing an operatingsystem function call.
 14. A device driver module according to claim 1,wherein the information passed to the operating system by theinitialization portion is a subset of the information received from thedetected driver plug-in module.
 15. A device driver module according toclaim 14, wherein the information passed to the operating system by theinitialization portion includes information corresponding to a number ofdialog property sheets supported by the detected driver plug-in moduleand attributes of each dialog property sheet supported by the detecteddriver plug-in module.
 16. A device driver module according to claim 11,wherein the functional portion of the detected driver plug-in module iscomprised of executable code to implement functionality represented bythe detected driver plug-in module.
 17. A device driver module accordingto claim 16, wherein the functional portion of the detected driverplug-in module is comprised of executable code to implementfunctionality of one or more dialog property sheets.
 18. A device drivermodule according to claim 11, wherein the initialization portion loadsthe detected driver plug-in module into a random access memory andexecutes the functional portion by utilizing the functional pointer. 19.A device driver module according to claim 1, wherein the initializationportion stores the information received from the detected driver plug-inmodule into a local data structure.
 20. A device driver module accordingto claim 1, wherein the information received from the detected driverplug-in module includes a type of functionality supported by thedetected driver plug-in module, and wherein the initialization portiondetermines, based on the type of functionality, whether to passinformation to the operating system and to access and execute thefunctional portion of the detected driver plug-in module.
 21. A devicedriver module according to claim 1, wherein the event notificationcorresponding to the external device includes a current status of theexternal device.
 22. A device driver module according to claim 1,wherein the event notification corresponding to the external deviceincludes a current status of an operation being performed by theexternal device.
 21. A device driver module according to claim 1,wherein the functional portion of the detected driver plug-in moduleutilizes the event notification passed from the initialization portion.22. A device driver module according to claim 1, wherein the informationobtained by the initialization portion includes an event-requestindicator which corresponds to one or more types of event notificationthat the detected driver plug-in module will accept from theinitialization portion.
 23. A device driver module according to claim22, wherein the initialization portion determines whether the detecteddriver plug-in module will accept the event notification received fromthe operating system based on the event-request indicator.
 24. A devicedriver module according to claim 1, wherein the external device is aprinter.
 25. A device driver module according to claim 24, wherein theevent notification corresponds to a print job status.
 26. A devicedriver module according to claim 24, wherein the device driver module isa user interface module, and wherein the detected driver plug-in moduleimplements functionality for one or more dialog property sheets.
 27. Adevice driver module according to claim 26, wherein one or more of thedialog property sheets correspond to an installation function forinstalling support for another printer on the computing device.
 28. Adevice driver module according to claim 26, wherein one or more of thedialog property sheets correspond to a print-job redirect function forredirecting a print job to another printer.
 28. A device driver moduleaccording to claim 26, wherein one or more of the dialog property sheetscorrespond to a secure printing function for providing secure printingof a print job.
 29. A device driver module according to claim 26,wherein one or more of the dialog property sheets correspond to a policymanagement function for controlling access to the printer and forcontrolling a type of print job that can be sent to the printer.
 30. Adevice driver module according to claim 26, wherein one or more of thedialog property sheets correspond to a job accounting function fortracking a number and type of print jobs sent to the printer from thecomputing device.
 31. A device driver module according to claim 26,wherein one or more of the dialog property sheets correspond to aprinter feature modification function for supporting changes infunctional capabilities of the printer.
 32. A device driver moduleaccording to claim 1, wherein the device driver module and the driverplug-in module are each comprised of a dynamic link library file.
 33. Adevice driver module according to claim 1, wherein the initializationportion passes the event notification to the detected driver plug-inmodule by utilizing an event handler that is supported by the detecteddriver plug-in module.
 34. A user interface module of a printer driverfor supporting the use of a printer by a computing device which executesan operating system, the user interface module comprising: aninitialization portion which is called by the operating system,whereupon the initialization portion detects a driver plug-in identifierin a system registry of the operating system, accesses and loads into amemory a driver plug-in module corresponding to the driver plug-inidentifier, obtains a pointer from the driver plug-in module to aninformation function call within the driver plug-in module, executes theinformation function call to receive information from the driver plug-inmodule, stores the received information in a local data structure, andpasses a portion of the received information to the operating system byusing an operating system function call; and an operation portion thataccesses and executes a functional portion of the driver plug-in moduleby using a functional pointer provided in the received information, thatreceives from the operating system an event notification correspondingto a print job being performed by the printer and that, in the case thatan event-request indicator provided in the received informationindicates that the driver plug-in module accepts the event notification,passes the event notification to the driver plug-in module.
 35. A driverplug-in module for use by a device driver module of a device driver, thedevice driver for supporting the use of an external device by acomputing device executing an operating system, the driver plug-inmodule comprising: a functional portion having executable code thatsupports a functional application; and a resource portion which includesresource information corresponding to the functionality supported bydriver plug-in module, and an information pointer to an informationfunction call, whereby the information pointer is accessed by the devicedriver module to initiate the information function call which returns tothe device driver module a resource pointer corresponding to theresource information of the resource portion, and a functional pointercorresponding to the executable code of the functional portion.
 36. Adriver plug-in module according to claim 35, wherein the resourceinformation includes a number of dialog property sheets supported by thedriver plug-in module, a type of each dialog property sheet supported bythe driver plug-in module, and attributes of each dialog property sheetsupported by the driver plug-in module.
 37. A driver plug-in moduleaccording to claim 35, wherein the device driver module obtains theresource information by using the resource pointer.
 38. A driver plug-inmodule according to claim 35, wherein the device driver module executesthe executable code of the functional portion by using the functionalpointer.
 39. A driver plug-in module according to claim 35, wherein theresource portion further includes an event pointer to an event handler,and the event pointer is passed to the device driver module via theinformation function call, whereby the event pointer is used by thedevice driver module to initiate the event handler to pass an eventnotification received by the device driver module from the operatingsystem to the driver plug-in module.
 40. A driver plug-in moduleaccording to claim 39, wherein the event notification is used by theexecutable code of the functional portion of the driver plug-in module.41. A driver plug-in module according to claim 35, wherein the resourceportion further includes a functionality type corresponding to afunction supported by the driver plug-in module, and wherein thefunctionality type is returned to the device driver module through theinformation function call.
 42. A driver plug-in module according toclaim 35, wherein the resource portion further includes an event-requestindicator which indicates at least one type of event notification usedby the driver plug-in module, and wherein the event-request indicator isreturned to the device driver module through the information functioncall.
 43. A driver plug-in module according to claim 35, wherein thedevice driver module is a user interface module, the driver plug-inmodule supports at least one dialog property sheet, and the externaldevice is a printer.
 44. A driver plug-in module according to claim 43,wherein the at least one dialog property sheet corresponds to aninstallation function for installing support for another printer on thecomputing device.
 45. A driver plug-in module according to claim 43,wherein the at least one dialog property sheet corresponds to aprint-job redirect function for redirecting a print job to anotherprinter.
 46. A driver plug-in module according to claim 43, wherein theat least one dialog property sheet corresponds to a secure printingfunction for providing secure printing of a print job.
 47. A driverplug-in module according to claim 43, wherein the at least one dialogproperty sheet corresponds to a policy management function forcontrolling access to the printer and for controlling a type of printjob that can be sent to the printer.
 48. A driver plug-in moduleaccording to claim 43, wherein the at least one dialog property sheetcorresponds to a job accounting function for tracking a number and typeof print jobs sent to the printer from the computing device.
 49. Adriver plug-in module according to claim 43, wherein the at least onedialog property sheet corresponds to a printer feature modificationfunction for supporting changes in functional capabilities of theprinter.
 50. A driver plug-in module according to claim 35, wherein thedevice driver module and the driver plug-in module are each comprised ofa dynamic link library file.
 51. A driver plug-in module for use by auser interface module of a printer driver which supports the use of aprinter by a computing device executing an operating system, the driverplug-in module comprising: a functional portion having executable codethat supports at least one dialog property sheet corresponding to afunctional application; and a resource portion which includes resourceinformation that includes a number of dialog property sheets supportedby the driver plug-in module, a type of each dialog property sheetsupported by the driver plug-in module, attributes of each dialogproperty sheet supported by the driver plug-in module, an informationpointer to an information function call, and an event pointer to anevent handler, whereby the information pointer is accessed by the userinterface module to initiate the information function call which returnsto the user interface module a resource pointer corresponding to theresource information of the resource portion, and a functional pointercorresponding to the executable code of the functional portion, andwhereby the event pointer is used by the user interface module toinitiate the event handler which passes the event notification receivedby the user interface module from the operating system to the driverplug-in module, the event notification corresponding to a status of aprint job being performed by the printer.
 52. A method for registering adriver plug-in module for use by a device driver module of a devicedriver which supports the use of an external device by a computingdevice, the method comprising the steps of: identifying at least oneavailable driver plug-in module located on an external source; selectingat least one of the available driver plug-in modules for installation onthe computing device; and installing each selected driver plug-in moduleon the computing device by storing each selected driver plug-in modulein a memory on the computing device, and entering an identifiercorresponding to each selected driver plug-in module into a systemregistry of an operating system which is executing on the computingdevice.
 53. A method according to claim 52, wherein the method isperformed by an installation script provided for installation of thedevice driver.
 54. A method according to claim 53, wherein theinstallation script also installs the device driver module.
 55. A methodaccording to claim 52, wherein the method is performed by anapplication.
 56. A method according to claim 55, wherein the applicationis accessed from the internet.
 57. A method according to claim 55,wherein the application is accessed from a web page.
 58. A methodaccording to claim 55, wherein the application is accessed from a memorymedium.
 59. A method according to claim 55, wherein the application isaccessed from a CD-ROM.
 60. A method according to claim 52, wherein theexternal source is the internet.
 61. A method according to claim 52,wherein the external source is a web page.
 62. A method according toclaim 52, wherein the external source is a memory medium.
 63. A methodaccording to claim 52, wherein the external source is a CD-ROM.
 64. Amethod according to claim 52, wherein each identifier is entered into asystem registry location corresponding to a name of the external device.65. A method according to claim 52, wherein each identifier is enteredinto a system registry location corresponding to a name of a user.
 66. Amethod according to claim 52, wherein each identifier is entered into asystem registry location corresponding to a name of the computingdevice.
 67. A method according to claim 52, wherein each identifier isentered into a system registry location corresponding to a type of theexternal device.
 68. A method for performing a print job on a printer,the print job being sent to the printer by a computing device, themethod comprising the steps of: receiving, by an operating systemexecuting in the computing device, a first user input request to displaya main printer dialog property sheet on a display of the computingdevice; initiating, by the operating system, execution of a userinterface module of a printer driver corresponding to the printer;detecting, by the user interface module, an identifier in a systemregistry corresponding to a driver plug-in module; obtaining, by theuser interface module, tabbed dialog property sheet information and afunctional pointer from the driver plug-in module, and passing thetabbed dialog property sheet information and main dialog property sheetinformation from the user interface module to the operating system;displaying, by the operating system, the main printer dialog propertysheet on the display, the main dialog property sheet including a tab toaccess a tabbed dialog property sheet corresponding to the tabbed dialogproperty sheet information obtained from the driver plug-in module;receiving, by the operating system, a second user input request todisplay the tabbed dialog property sheet; displaying, by the operatingsystem, the tabbed dialog property sheet in response to the second userinput request; receiving, by the operating system, a third user inputrequest to use a function supported by the tabbed dialog property sheet;sending, by the operating system, the third user input request to theuser interface module; initiating, upon utilization of the functionalpointer by the user interface module, execution of executable code inthe driver plug-in module which implements the function corresponding tothe third user input request; receiving, by the operating system, aprint request to initiate printing of image data by the printer;rendering, by the printer driver upon receiving the print request fromthe operating system, the image data into a print job and sending theprint job to the printer which executes the print job; and sending printan event notification related to the print job from the user interfacemodule to the driver plug-in module, the print event notification beingutilized by the executable code in the driver plug-in module.
 69. Amethod for supporting the use of an external device by a computingdevice which executes an operating system, the method comprising thesteps of: receiving an initialization call from the operating system;detecting the presence of a driver plug-in module; obtaining informationfrom a resource portion of the detected driver plug-in module; passingthe information from the detected driver plug-in module to the operatingsystem; initiating execution of a functional portion of the detectedplug-in module; receiving from the operating system an eventnotification corresponding to the external device; and passing, in thecase that the detected driver plug-in module accepts the eventnotification, the event notification to the detected driver plug-inmodule.
 70. A method for supporting the use of a printer by a computingdevice which executes an operating system, the method comprising thesteps of: receiving an initialization call from the operating system;detecting a driver plug-in identifier in a system registry of theoperating system; loading into a memory of the computing device a driverplug-in module corresponding to the driver plug-in identifier; obtaininga pointer from the driver plug-in module to an information function callwithin the driver plug-in module; executing the information functioncall to receive information from the driver plug-in module; storing thereceived information in a local data structure; passing a portion of thereceived information to the operating system by using an operatingsystem function call; executing a functional portion of the driverplug-in module by using a functional pointer provided in the receivedinformation; receiving from the operating system an event notificationcorresponding to a print job being performed by the printer; andpassing, in the case that an event-request indicator provided in thereceived information indicates that the driver plug-in module acceptsthe event notification, the event notification to the driver plug-inmodule.
 71. Computer-executable process steps stored on a computerreadable medium, said computer-executable process steps for supportinguse of an external device by a computing device which executes anoperating system, said computer-executable process steps comprisingprocess steps executable to perform a method according to any of claims52 to
 70. 72. A computer-readable medium which storescomputer-executable process steps, the computer-executable process stepsto support use of an external device by a computing device whichexecutes an operating system, said computer-executable process stepscomprising process steps executable to perform a method according to anyof claims 52 to 70.